const Fly = require('flyio/dist/npm/wx')
const fly = new Fly()
// fly.js 中文文档 flyio 帮助文档 https://wendux.github.io/dist/#/doc/flyio/readme

import store from '@/store/store.js'
import config from '@/common/config.js'
import util from '@/common/util.js'

fly.config.headers['Content-Type'] = 'application/json'
// fly.config.headers['Content-Type'] = 'application/x-www-form-urlencoded'
// fly.config.headers['Content-Type'] = 'multipart/form-data'
fly.config.baseURL = config.baseURL

// 请求拦截器
fly.interceptors.request.use(async (request) => {
  const token = util.getToken()

  if (token) {
    request.headers.Authorization = 'Bearer ' + token
  }

  // console.log('请求拦截器 request', request)
  return request
})

/**
 * 响应拦截器里 c 开头的是自定义字段
 * - cHideError 表示当发生错误时是否不提示错误信息（网络错误或请求超时除外），默认 false，默认提示
 */

// 响应拦截器
fly.interceptors.response.use(
  function (response) {
    //不要使用箭头函数，否则调用this.lock()时，this指向不对
    // console.log('响应拦截器 response', response)

    // 获取服务器返回的数据
    const result = response.data
    // code=200 是成功
    if (result.code !== 200) {
      console.log('响应拦截器 code error', response)
      if (!response.request.cHideError) {
        uni.showToast({ title: result.msg, icon: 'none',duration:2000 })
      }
    } else {
      // console.log('响应拦截器，成功响应', result.data)
    }

    if (result.code === 200) {
      return result
    } else {
      if (result.code === 401) {
        console.log('登录过期')
        store.dispatch('LogOut')
        uni.redirectTo({ url: '/pages/login/role' })
      }

      return Promise.reject(result)
    }
  },
  function (error) {
    let errorMessage = error.message
    if (error.response && error.response.data && typeof error.response.data === 'object' && error.response.data.msg) {
      errorMessage = error.response.data.msg
    }
    if (error.status === 401) {
      // 登录过期
      util.logoutClear()
      uni.navigateTo({
        url: '/pages/login/role',
        success: (res) => console.log('跳转 login success', res),
        fail: (error) => console.log('跳转 login fail', error),
      })
    } else if (error.status === 404) {
      errorMessage = '404 - Not Found'
    } else if (error.status >= 500) {
      errorMessage = '服务器未知错误'
    }

    if (!error.request.cHideError) {
      uni.showToast({ title: errorMessage, icon: 'none',duration:2000})
    }

    if (error.status === 0) {
      uni.showToast({ title: errorMessage || '网络错误', icon: 'none',duration:2000 })
    } else if (error.status === 1) {
      uni.showToast({ title: errorMessage || '请求超时', icon: 'none',duration:2000 })
    }

    return Promise.reject(error)
  }
)

export default fly
